Ext.namespace("Hroze.Form");
/**
 * 表单工具类�?���?����
 */
Hroze.Form = function() {
	return {
		/**
		 * 为输入框注册得到焦点和失去焦点时间，用于显示无输入时的提示信息
		 * @param {string}  el 输入框id或者dom
		 * @param {string}	emptyText 结果为空时显示的内容
		 * 
		 */
		initFocusEvent : function(el, emptyText) {
			if (!emptyText) {
				emptyText = Ext.fly(el).dom.value;
			}
			Ext.fly(el).on("focus", function(e, t) {
						e.preventDefault();
						if (t.value == emptyText) {
							t.value = '';
						}
					});
			Ext.fly(el).on("blur", function(e, t) {
						e.preventDefault();
						if (Ext.isEmpty(t.value)) {
							t.value = emptyText;
						}
					});
			return emptyText;
		},
		putValue : function(obj, name, value) {
			var v = obj[name];
			if (Ext.isString(v)) {
				var arr = [];
				arr.push(v);
				arr.push(value);
				obj[name] = arr;
			} else if (Ext.isArray(v)) {
				obj[name].push(value);
			} else {
				obj[name] = value;
			}
		},
		/**
		 * 在指定节点范围内找到指定name属性的值
		 * @param {mixed} node  表单或者其他类型的节点，用于指定取值的范围
		 * @param {String} name 输入框name属性的值（可选），不指定取所有值
		 * @return 存放值的对象
		 */
		getValuesByName : function(node, name) {
			var selectors;
			var values = {};
			if (!name) {
				selectors = "[name!=]"
			} else {
				selectors = "[name=" + name + "]";
			}
			var fds = Ext.fly(node).query(selectors);
			if (Ext.isArray(fds)) {

				Ext.each(fds, function(item, index, arr) {
					if ("text" == item.type ||"hidden"==item.type||'password'==item.type|| "TEXTAREA" == item.tagName) {
						Hroze.Form.putValue(values, item.name, item.value
										? item.value
										: '');
					} else if ("checkbox" == item.type || "radio" == item.type) {
						if (item.checked) {
							Hroze.Form.putValue(values, item.name,
									item.value ? item.value : '');
						}
					} else if ("SELECT" == item.tagName) {
						Hroze.Form.putValue(values, item.name, item.value
										? item.value
										: '');
					} else if ("A" == item.tagName) {
						Hroze.Form.putValue(values, item.name, item.id
										? item.id
										: item.innerHTML);
					}
				});

			}
			return values;
		},
		/**
		 * 取得INPUT类型输入框的值
		 * @param {mix} id或dom
		 */
		getValues : function(node) {
			var values = {};
			var fds = Ext.fly(node).query("INPUT");
			if (Ext.isArray(fds)) {

				Ext.each(fds, function(item, index, arr) {
					if (item.type == "text") {
						Hroze.Form.putValue(values, item.name, item.value
										? item.value
										: '');
					} else if (item.type == "checkbox" || item.type == "radio") {
						if (item.checked) {
							Hroze.Form.putValue(values, item.name,
									item.value ? item.value : '');
						}
					}
				});

			}
			var sels = Ext.fly(node).query("SELECT");
			if (Ext.isArray(sels)) {
				Ext.each(sels, function(item, index, arr) {
							Hroze.Form.putValue(values, item.name,
									item.value ? item.value : '');
						});
			}
			return values;
		},
		/**
		 * 为一个表单内的重名输入项按顺序赋值
		 * @param {string} name 参数名
		 * @param {Array} value 参数值数组
		 * @param {string} id 赋值范围（通常为表单Id）
		 */
		setValues : function(name, value, id) {
			var fds = Ext.query("[name=" + name + "]", Ext.getDom(id));
			if (Ext.isArray(fds)) {
				Ext.each(fds, function(item, index, arr) {
							var v = "";
							if (value.length > index) {
								v = value[index];
							}
							if (item.tagName == 'INPUT') {
								if (item.type == "text") {
									item.value = v;
								} else if (item.type == "checkbox"
										|| item.type == "radio") {
									if (item.value == v) {
										item.checked = true;
									}
								}
							} else if (item.tagName == "SELECT") {
								item.value = v;
							}
						});
			}

		},
		/**
		 * 为一个表单内的重名输入项赋同一值
		 * @param {string} name 参数名
		 * @param {string} value 参数值
		 * @param {string} id 赋值范围（通常为表单Id）
		 */
		setValue : function(name, value, id) {
			var fds = Ext.query("[name=" + name + "]", Ext.getDom(id));
			if (Ext.isArray(fds)) {
				Ext.each(fds, function(item, index, arr) {
							if (item.tagName == 'INPUT') {
								if (item.type == "text") {
									item.value = value;
								} else if (item.type == "checkbox"
										|| item.type == "radio") {
									if (item.value == value) {
										item.checked = true;
									}
								}
							} else if (item.tagName == "SELECT") {
								item.value = value;
							}
						});
			}
		},
		/**
		 * 全部选中或者不选中checkbox
		 * @param {string} name checkbox名字
		 * @param {boolean} state 选中还是不选中
		 * @param {mixed} 操作范围
		 * 
		 */
		checkAll : function(name,state, root) {
			var bool = true;
			if (Ext.isBoolean(state)) {
				bool = state;
			}
			if (Ext.isString(root)) {
				root = Ext.getDom(root);
			}
			var cks = Ext
					.query("INPUT[type=checkbox][name=" + name + "]", root);
			if (Ext.isArray(cks)) {
				Ext.each(cks, function(item, index, arr) {
							item.checked = bool;
						});
			}

		}
	}
}();